<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>GSoC2011SfM: D:/Travail/These/Determination caracteristiques camera/GSoC/SfM/src/TracksOfPoints.h Source File</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />

<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>

</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">GSoC2011SfM
   &#160;<span id="projectnumber">0.1</span>
   </div>
   <div id="projectbrief">Google Summer of Code 2011: Structure from motion</div>
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.7.5.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
    </ul>
  </div>
<div class="header">
  <div class="headertitle">
<div class="title">D:/Travail/These/Determination caracteristiques camera/GSoC/SfM/src/TracksOfPoints.h</div>  </div>
</div>
<div class="contents">
<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
<a name="l00002"></a>00002 <span class="preprocessor">#ifndef _GSOC_SFM_TRACKS_OF_POINTS_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="preprocessor">#define _GSOC_SFM_TRACKS_OF_POINTS_H 1</span>
<a name="l00004"></a>00004 <span class="preprocessor"></span>
<a name="l00005"></a>00005 <span class="preprocessor">#include &quot;macro.h&quot;</span> <span class="comment">//SFM_EXPORTS</span>
<a name="l00006"></a>00006 
<a name="l00007"></a>00007 <span class="preprocessor">#include &lt;numeric&gt;</span>
<a name="l00008"></a>00008 <span class="preprocessor">#include &quot;opencv2/calib3d/calib3d.hpp&quot;</span>
<a name="l00009"></a>00009 
<a name="l00010"></a>00010 <span class="keyword">namespace </span>OpencvSfM{
<a name="l00011"></a>00011   <span class="keyword">class </span>SFM_EXPORTS PointsToTrack;
<a name="l00012"></a>00012   <span class="keyword">class </span>SFM_EXPORTS PointOfView;
<a name="l00013"></a>00013 
<a name="l00023"></a><a class="code" href="class_opencv_sf_m_1_1_track_of_points.html">00023</a>   <span class="keyword">class </span>SFM_EXPORTS <a class="code" href="class_opencv_sf_m_1_1_track_of_points.html" title="This class store the track of keypoints. A track is a connected set of matching keypoints across mult...">TrackOfPoints</a>
<a name="l00024"></a>00024   {
<a name="l00025"></a>00025     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="class_opencv_sf_m_1_1_sequence_analyzer.html" title="This class tries to match points in the entire sequence. It follow ideas proposed by Noah Snavely: Mo...">SequenceAnalyzer</a>;
<a name="l00026"></a>00026 
<a name="l00027"></a>00027   <span class="keyword">protected</span>:
<a name="l00028"></a><a class="code" href="class_opencv_sf_m_1_1_track_of_points.html#ad47f8be9467b36497a7484aea438cbcc">00028</a>     cv::Ptr&lt;cv::Vec3d&gt; <a class="code" href="class_opencv_sf_m_1_1_track_of_points.html#ad47f8be9467b36497a7484aea438cbcc" title="The corresponding 3D coordinates. If not available, Ptr is empty.">point3D</a>;
<a name="l00029"></a><a class="code" href="class_opencv_sf_m_1_1_track_of_points.html#a3a03a4468cd94b38de2b8a9787379801">00029</a>     std::vector&lt;unsigned int&gt; <a class="code" href="class_opencv_sf_m_1_1_track_of_points.html#a3a03a4468cd94b38de2b8a9787379801" title="List of image indexes of unordered points.">images_indexes_</a>;
<a name="l00030"></a><a class="code" href="class_opencv_sf_m_1_1_track_of_points.html#a245986f9cdf722e5aec386585677a188">00030</a>     std::vector&lt;unsigned int&gt; <a class="code" href="class_opencv_sf_m_1_1_track_of_points.html#a245986f9cdf722e5aec386585677a188" title="List of point indexes of unordered points.">point_indexes_</a>;
<a name="l00031"></a><a class="code" href="class_opencv_sf_m_1_1_track_of_points.html#a2466ba86153215a339806c9a86322195">00031</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_opencv_sf_m_1_1_track_of_points.html#a2466ba86153215a339806c9a86322195" title="Color of this point (computed using the mean of every 2D points projections.">color</a>;
<a name="l00032"></a>00032 
<a name="l00036"></a><a class="code" href="class_opencv_sf_m_1_1_track_of_points.html#af55a2dcf8abb42bdb1827e38eee9866b">00036</a>     std::vector&lt;bool&gt; <a class="code" href="class_opencv_sf_m_1_1_track_of_points.html#af55a2dcf8abb42bdb1827e38eee9866b">good_values</a>;
<a name="l00041"></a><a class="code" href="class_opencv_sf_m_1_1_track_of_points.html#ada7b5f6522454fe0a57438396e3ef24c">00041</a>     <span class="keywordtype">int</span> <a class="code" href="class_opencv_sf_m_1_1_track_of_points.html#ada7b5f6522454fe0a57438396e3ef24c">track_consistance</a>;
<a name="l00042"></a>00042   <span class="keyword">public</span>:
<a name="l00046"></a>00046     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Type, <span class="keywordtype">int</span> size&gt;
<a name="l00047"></a><a class="code" href="class_opencv_sf_m_1_1_track_of_points.html#a25258b72fc3d724deab33e42856c7e7f">00047</a>     operator cv::Vec&lt;Type,size&gt;&amp;( ) {
<a name="l00048"></a>00048       <span class="keywordflow">return</span> *point3D;
<a name="l00049"></a>00049     }
<a name="l00050"></a>00050     <a class="code" href="class_opencv_sf_m_1_1_track_of_points.html" title="This class store the track of keypoints. A track is a connected set of matching keypoints across mult...">TrackOfPoints</a>( ):track_consistance( 0 ),color(0){};
<a name="l00051"></a>00051     ~TrackOfPoints();
<a name="l00059"></a>00059     <span class="keywordtype">bool</span> addMatch( <span class="keyword">const</span> <span class="keywordtype">int</span> image_src, <span class="keyword">const</span> <span class="keywordtype">int</span> point_idx );
<a name="l00060"></a>00060 
<a name="l00066"></a><a class="code" href="class_opencv_sf_m_1_1_track_of_points.html#aea06a066b4be5fa2ff5ef09cea7fb745">00066</a>     <span class="keyword">inline</span> <span class="keywordtype">bool</span> containImage( <span class="keyword">const</span> <span class="keywordtype">int</span> image_wanted )<span class="keyword"> const</span>
<a name="l00067"></a>00067 <span class="keyword">    </span>{
<a name="l00068"></a>00068       std::vector&lt;unsigned int&gt;::const_iterator idx = std::find(
<a name="l00069"></a>00069         images_indexes_.begin( ),images_indexes_.end( ),
<a name="l00070"></a>00070         image_wanted );
<a name="l00071"></a>00071       <span class="keywordflow">return</span> (idx != images_indexes_.end( ) &amp;&amp;
<a name="l00072"></a>00072         good_values[idx - images_indexes_.begin( ) ]==true );
<a name="l00073"></a>00073     }
<a name="l00080"></a>00080     <span class="keywordtype">bool</span> containPoint( <span class="keyword">const</span> <span class="keywordtype">int</span> image_src, <span class="keyword">const</span> <span class="keywordtype">int</span> point_idx1 ) <span class="keyword">const</span>;
<a name="l00085"></a><a class="code" href="class_opencv_sf_m_1_1_track_of_points.html#a3e18eabd0bbdc80e5a183eaf3d6a8d69">00085</a>     <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getNbTrack( )<span class="keyword"> const</span>
<a name="l00086"></a>00086 <span class="keyword">    </span>{
<a name="l00087"></a>00087       <span class="keywordflow">return</span> track_consistance&lt;0 ? 0 : std::accumulate(
<a name="l00088"></a>00088     good_values.begin( ), good_values.end( ), 0 );
<a name="l00089"></a>00089     };
<a name="l00096"></a>00096     cv::DMatch toDMatch( <span class="keyword">const</span> <span class="keywordtype">int</span> img1,<span class="keyword">const</span> <span class="keywordtype">int</span> img2 ) <span class="keyword">const</span>;
<a name="l00103"></a>00103     <span class="keywordtype">void</span> getMatch( <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index,
<a name="l00104"></a>00104       <span class="keywordtype">int</span> &amp;idImage, <span class="keywordtype">int</span> &amp;idPoint ) <span class="keyword">const</span>;
<a name="l00110"></a><a class="code" href="class_opencv_sf_m_1_1_track_of_points.html#af61c242e5fabb09d85305426ab46307c">00110</a>     <span class="keyword">inline</span> <span class="keywordtype">int</span> getPointIndex( <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> image )<span class="keyword"> const</span>
<a name="l00111"></a>00111 <span class="keyword">    </span>{
<a name="l00112"></a>00112       std::vector&lt;unsigned int&gt;::const_iterator result =
<a name="l00113"></a>00113         std::find( images_indexes_.begin( ),images_indexes_.end( ),image );
<a name="l00114"></a>00114       <span class="keywordflow">if</span>( result == images_indexes_.end( ) )
<a name="l00115"></a>00115         <span class="keywordflow">return</span> -1;
<a name="l00116"></a>00116       <span class="keywordflow">return</span> point_indexes_[ result - images_indexes_.begin( ) ];
<a name="l00117"></a>00117     };
<a name="l00124"></a><a class="code" href="class_opencv_sf_m_1_1_track_of_points.html#ab64160435d833ce829d6583bb181944a">00124</a>     <span class="keyword">inline</span> <span class="keywordtype">int</span> getImageIndex( <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx )<span class="keyword"> const</span>
<a name="l00125"></a>00125 <span class="keyword">    </span>{
<a name="l00126"></a>00126       <span class="keywordflow">return</span> images_indexes_[ idx ];
<a name="l00127"></a>00127     };
<a name="l00128"></a>00128     
<a name="l00136"></a>00136     <span class="keywordtype">double</span> triangulateLinear( std::vector&lt;PointOfView&gt;&amp; cameras,
<a name="l00137"></a>00137       <span class="keyword">const</span> std::vector&lt; cv::Ptr&lt;PointsToTrack&gt; &gt; &amp;points_to_track,
<a name="l00138"></a>00138       cv::Vec3d&amp; points3D,
<a name="l00139"></a>00139       <span class="keyword">const</span> std::vector&lt;bool&gt; &amp;masks = std::vector&lt;bool&gt;( ) );
<a name="l00149"></a>00149     <span class="keywordtype">double</span> triangulateRobust( std::vector&lt;PointOfView&gt;&amp; cameras,
<a name="l00150"></a>00150       <span class="keyword">const</span> std::vector&lt; cv::Ptr&lt; PointsToTrack &gt; &gt; &amp;points_to_track,
<a name="l00151"></a>00151       cv::Vec3d&amp; points3D,
<a name="l00152"></a>00152       <span class="keywordtype">double</span> reproj_error = 4,
<a name="l00153"></a>00153       <span class="keyword">const</span> std::vector&lt;bool&gt; &amp;masks = std::vector&lt;bool&gt;( ) );
<a name="l00154"></a>00154 
<a name="l00163"></a>00163     <span class="keywordtype">void</span> removeOutliers( std::vector&lt;PointOfView&gt;&amp; cameras,
<a name="l00164"></a>00164       <span class="keyword">const</span> std::vector&lt; cv::Ptr&lt; PointsToTrack &gt; &gt; &amp;points_to_track,
<a name="l00165"></a>00165       <span class="keywordtype">double</span> reproj_error = 4,
<a name="l00166"></a>00166       std::vector&lt;bool&gt; *masks = NULL );
<a name="l00167"></a>00167     
<a name="l00172"></a><a class="code" href="class_opencv_sf_m_1_1_track_of_points.html#ab3d94ed06541dc65c1670925bc5cde1a">00172</a>     <span class="keyword">inline</span> <span class="keywordtype">void</span> set3DPosition( cv::Vec3d newPoint )
<a name="l00173"></a>00173     {
<a name="l00174"></a>00174       <span class="keywordflow">if</span>( !point3D )
<a name="l00175"></a>00175         point3D = <span class="keyword">new</span> cv::Vec3d( newPoint );
<a name="l00176"></a>00176       <span class="keywordflow">else</span>
<a name="l00177"></a>00177         *point3D = newPoint;
<a name="l00178"></a>00178     }
<a name="l00183"></a><a class="code" href="class_opencv_sf_m_1_1_track_of_points.html#a33e08312ec77fe141e106d570ce75d2a">00183</a>     <span class="keyword">inline</span> cv::Ptr&lt;cv::Vec3d&gt; <a class="code" href="class_opencv_sf_m_1_1_track_of_points.html#a33e08312ec77fe141e106d570ce75d2a">get3DPosition</a>(){ <span class="keywordflow">return</span> point3D; };
<a name="l00184"></a>00184     
<a name="l00189"></a><a class="code" href="class_opencv_sf_m_1_1_track_of_points.html#aae4506ca2306c22e44d4577467b1b545">00189</a>     <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_opencv_sf_m_1_1_track_of_points.html#aae4506ca2306c22e44d4577467b1b545">getColor</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> color;};
<a name="l00194"></a><a class="code" href="class_opencv_sf_m_1_1_track_of_points.html#a8dd77a29977f8231ebcf17bcabc8abc8">00194</a>     <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="class_opencv_sf_m_1_1_track_of_points.html#a8dd77a29977f8231ebcf17bcabc8abc8">setColor</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c) {color = c;};
<a name="l00195"></a>00195     
<a name="l00201"></a>00201     <span class="keyword">static</span> <span class="keywordtype">void</span> keepTrackHavingImage( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx_image,
<a name="l00202"></a>00202       std::vector&lt;TrackOfPoints&gt;&amp; tracks );
<a name="l00208"></a>00208     <span class="keyword">static</span> <span class="keywordtype">void</span> keepTrackWithImages( <span class="keyword">const</span>
<a name="l00209"></a>00209       std::vector&lt;int&gt;&amp; imgList,
<a name="l00210"></a>00210       std::vector&lt;TrackOfPoints&gt;&amp; tracks );
<a name="l00211"></a>00211 
<a name="l00219"></a>00219     <span class="keyword">static</span> <span class="keywordtype">void</span> mixTracks( <span class="keyword">const</span> std::vector&lt;TrackOfPoints&gt;&amp; list_tracks,
<a name="l00220"></a>00220       std::vector&lt;TrackOfPoints&gt;* mixed_tracks);
<a name="l00221"></a>00221 
<a name="l00222"></a>00222   <span class="keyword">protected</span>:
<a name="l00231"></a>00231     <span class="keywordtype">double</span> errorEstimate( std::vector&lt; PointOfView &gt;&amp; cameras,
<a name="l00232"></a>00232       <span class="keyword">const</span> std::vector&lt; cv::Ptr&lt; PointsToTrack &gt; &gt; &amp;points_to_track,
<a name="l00233"></a>00233       cv::Vec3d&amp; points3D,
<a name="l00234"></a>00234       <span class="keyword">const</span> std::vector&lt;bool&gt; &amp;masks = std::vector&lt;bool&gt;( ) ) <span class="keyword">const</span>;
<a name="l00235"></a>00235   };
<a name="l00236"></a>00236 
<a name="l00237"></a>00237 
<a name="l00241"></a><a class="code" href="struct_opencv_sf_m_1_1_image_link.html">00241</a>   <span class="keyword">typedef</span> <span class="keyword">struct</span>
<a name="l00242"></a>00242   {
<a name="l00243"></a><a class="code" href="struct_opencv_sf_m_1_1_image_link.html#acf7906b02386e2a30cfb48b7b621cc35">00243</a>     <span class="keywordtype">int</span> <a class="code" href="struct_opencv_sf_m_1_1_image_link.html#acf7906b02386e2a30cfb48b7b621cc35" title="index of first image">imgSrc</a>;
<a name="l00244"></a><a class="code" href="struct_opencv_sf_m_1_1_image_link.html#ac1d76358c4e2691ed62a4cc6816f7123">00244</a>     <span class="keywordtype">int</span> <a class="code" href="struct_opencv_sf_m_1_1_image_link.html#ac1d76358c4e2691ed62a4cc6816f7123" title="index of second image">imgDest</a>;
<a name="l00245"></a>00245   } <a class="code" href="struct_opencv_sf_m_1_1_image_link.html" title="This structure store an image link ( two image ids )...">ImageLink</a>;
<a name="l00250"></a><a class="code" href="class_opencv_sf_m_1_1_images_graph_connection.html">00250</a>   <span class="keyword">class </span>SFM_EXPORTS <a class="code" href="class_opencv_sf_m_1_1_images_graph_connection.html" title="This class modelizes the images graph connections.">ImagesGraphConnection</a>
<a name="l00251"></a>00251   {
<a name="l00252"></a>00252   <span class="keyword">protected</span>:
<a name="l00258"></a><a class="code" href="class_opencv_sf_m_1_1_images_graph_connection.html#a20c516f5322711fe25e1b8bbcf2cc103">00258</a>     cv::SparseMat <a class="code" href="class_opencv_sf_m_1_1_images_graph_connection.html#a20c516f5322711fe25e1b8bbcf2cc103">images_graph_</a>;
<a name="l00259"></a>00259 
<a name="l00266"></a><a class="code" href="class_opencv_sf_m_1_1_images_graph_connection.html#a37d4b1cf25e57abeb3647f8c9e914276">00266</a>     <span class="keyword">inline</span> <span class="keywordtype">void</span> orderedIdx( <span class="keywordtype">int</span> i1,<span class="keywordtype">int</span> i2,<span class="keywordtype">int</span> idx[ 2 ] )
<a name="l00267"></a>00267     {
<a name="l00268"></a>00268       <span class="keywordflow">if</span>( i1&lt;i2 )
<a name="l00269"></a>00269       {
<a name="l00270"></a>00270         idx[ 0 ] = i1;
<a name="l00271"></a>00271         idx[ 1 ] = i2;
<a name="l00272"></a>00272       }
<a name="l00273"></a>00273       <span class="keywordflow">else</span>
<a name="l00274"></a>00274       {
<a name="l00275"></a>00275         idx[ 0 ] = i2;
<a name="l00276"></a>00276         idx[ 1 ] = i1;
<a name="l00277"></a>00277       }
<a name="l00278"></a>00278     }
<a name="l00279"></a>00279   <span class="keyword">public</span>:
<a name="l00283"></a><a class="code" href="class_opencv_sf_m_1_1_images_graph_connection.html#a83c711b6511c9c73948d6a6f4406f770">00283</a>     <a class="code" href="class_opencv_sf_m_1_1_images_graph_connection.html#a83c711b6511c9c73948d6a6f4406f770">ImagesGraphConnection</a>( ){};
<a name="l00284"></a>00284 
<a name="l00290"></a><a class="code" href="class_opencv_sf_m_1_1_images_graph_connection.html#aff4301f0dfe97b1e4de57b012e9d9f52">00290</a>     <span class="keyword">inline</span> <span class="keywordtype">bool</span> isGraphCreated( <span class="keywordtype">int</span> nbImages )
<a name="l00291"></a>00291     {
<a name="l00292"></a>00292       <span class="keywordflow">return</span> images_graph_.size( )!=0 &amp;&amp; images_graph_.nzcount( )!=0 &amp;&amp;
<a name="l00293"></a>00293         images_graph_.size( )[ 0 ] == nbImages &amp;&amp;
<a name="l00294"></a>00294         images_graph_.size( )[ 1 ] == nbImages;
<a name="l00295"></a>00295     }
<a name="l00296"></a>00296 
<a name="l00301"></a><a class="code" href="class_opencv_sf_m_1_1_images_graph_connection.html#a2419d1c31eb4e85caebcadd66a8134c7">00301</a>     <span class="keyword">inline</span> <span class="keywordtype">void</span> initStructure( <span class="keywordtype">int</span> nb_images )
<a name="l00302"></a>00302     {
<a name="l00303"></a>00303       <span class="keyword">const</span> <span class="keywordtype">int</span> dims = 2;
<a name="l00304"></a>00304       <span class="keywordtype">int</span> size[ ] = {nb_images,nb_images};
<a name="l00305"></a>00305       images_graph_.create( dims,size,CV_32S );
<a name="l00306"></a>00306     }
<a name="l00312"></a><a class="code" href="class_opencv_sf_m_1_1_images_graph_connection.html#a966c6d3f7fb148dfa05be5b77a343dcd">00312</a>     <span class="keyword">inline</span> <span class="keywordtype">void</span> addLink( <span class="keywordtype">int</span> first_image,<span class="keywordtype">int</span> second_image )
<a name="l00313"></a>00313     {
<a name="l00314"></a>00314       <span class="keywordtype">int</span> idx[ 2 ];
<a name="l00315"></a>00315       orderedIdx( first_image,second_image,idx );
<a name="l00316"></a>00316       images_graph_.ref&lt;<span class="keywordtype">int</span>&gt;( idx ) += 1;
<a name="l00317"></a>00317     }
<a name="l00324"></a><a class="code" href="class_opencv_sf_m_1_1_images_graph_connection.html#a1bf5fc6e488c640164cdc7e32c2041a9">00324</a>     <span class="keyword">inline</span> <span class="keywordtype">int</span> getNumbersOfLinks( <span class="keywordtype">int</span> first_image,<span class="keywordtype">int</span> second_image )
<a name="l00325"></a>00325     {
<a name="l00326"></a>00326       <span class="keywordtype">int</span> idx[ 2 ];
<a name="l00327"></a>00327       orderedIdx( first_image,second_image,idx );
<a name="l00328"></a>00328       <span class="keyword">const</span> <span class="keywordtype">int</span> *value=images_graph_.find&lt;<span class="keywordtype">int</span>&gt;( idx );
<a name="l00329"></a>00329       <span class="keywordflow">if</span>( value!=NULL )
<a name="l00330"></a>00330         <span class="keywordflow">return</span> *value;
<a name="l00331"></a>00331       <span class="keywordflow">return</span> 0;
<a name="l00332"></a>00332     }
<a name="l00340"></a>00340     <span class="keywordtype">int</span> getHighestLink( <span class="keywordtype">int</span> &amp;first_image,<span class="keywordtype">int</span> &amp;second_image,
<a name="l00341"></a>00341       <span class="keywordtype">int</span> max_number=1e9 );
<a name="l00348"></a>00348     <span class="keywordtype">void</span> getOrderedLinks( std::vector&lt;ImageLink&gt;&amp; outList,
<a name="l00349"></a>00349       <span class="keywordtype">int</span> min_number=0, <span class="keywordtype">int</span> max_number=1e9 );
<a name="l00357"></a>00357     <span class="keywordtype">void</span> getImagesRelatedTo( <span class="keywordtype">int</span> first_image, std::vector&lt;ImageLink&gt;&amp; outList,
<a name="l00358"></a>00358       <span class="keywordtype">int</span> min_number=0, <span class="keywordtype">int</span> max_number=1e9 );
<a name="l00359"></a>00359   };
<a name="l00360"></a>00360 }
<a name="l00361"></a>00361 <span class="preprocessor">#endif</span>
</pre></div></div>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>



<hr class="footer"/><address class="footer"><small>
Generated on Sun Aug 21 2011 16:45:52 for GSoC2011SfM by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.7.5.1
</small></address>

</body>
</html>
